﻿#ifndef EXCELENGINE_H
#define EXCELENGINE_H
#include <ActiveQt/QAxObject>
#include <Windows.h>
#include <QFile>
#include <QStringList>
#include <QString>

class ExcelEngine
{
public:
    ExcelEngine(void);
    ExcelEngine(const QString file_Name);
    ~ExcelEngine(void);

    // 打开Excel
    bool open(bool visible = false,bool display_Alerts = false);    

    // 通过Index获取sheet工作表
    QAxObject *getWorkSheet(int workSheet_Index);

    // 通过SheetName获取sheet工作表
    QAxObject *getWorkSheet(QString workSheet_Name);

    // 通过索引值获取工作表（workSheet）的表名
    QString getWorkSheetNameByIndex(int inedx);

    // 获取WorkSheets工作表名列表
    QStringList getWorkSheetNameList(void);

    // 获取表格有效区域内容
    QList<QVariant> getWorkSheetRange(QString workSheet_Name,int beginCellColumn,int beginCellRow,int endCellColumn,int endCellRow);

    // 获取表格有效区域内容
    QList<QVariant> getWorkSheetRange(QString workSheet_Name,QString beginCellColumn,int beginCellRow,QString endCellColumn,int endCellRow);

    // 获取单元格内容
    QString getCellString(int workSheet_Index,int row,int column);

    // 获取单元格内容
    QString getCellString(QString workSheet_Name,int row,int column);

    // 获取workSheet的行数
    int getWorkSheetRows(QString workSheet_Name);

    // 获取workSheet的行数
    int getWorkSheetRows(int  workSheet_Index);

    // 获取workSheet的列数
    int getWorkSheetColumns(QString workSheet_Name);

    // 获取workSheet的列数
    int getWorkSheetColumns(int workSheet_Index);

    // 保存（操作后要保存）
    bool save(void);

    // 关闭资源（释放资源）
    void close(void);

private:
    // 设置窗体是否可见
    bool setVisible(bool visible = false);

    // 释放资源
    void release(void);

    // 辅助函数（Excle列:将数字转字母）
    QString numberToAlphabet(int columeNumber);

private:

    bool m_IsOpened;

    // EXCEL程序指针
    QAxObject *m_Excel;

    // 工作簿集
    QAxObject *m_WorkBooks;

    // 当前活动的工作簿
    QAxObject *m_WorkBook;

    // 当前活动工作簿的工作表集（即所有的sheet表）
    QAxObject *m_WorkSheets;

    // 工作簿（m_WorkBook）中工作表（workSheet）的个数
    int m_WorkSheetCount;

    // 文件名
    QString m_FileName;
};

#endif // EXCELENGINE_H
